package savet.gui.modelos;

import java.util.LinkedList;
import java.util.List;
import javax.swing.table.AbstractTableModel;

/**
 *
 * @author Adisson Marinho
 */
public abstract class AbstractAtributoSalarioModel<T> extends AbstractTableModel {

    protected List<T> listaElementos;

    public AbstractAtributoSalarioModel() {
        this(null);
    }

    public AbstractAtributoSalarioModel(List<T> lista) {
        if (lista != null)
            this.listaElementos = lista;
        else
            this.listaElementos = new LinkedList<T>();
    }

    @Override
    public abstract void setValueAt(Object aValue, int rowIndex, int columnIndex);

    @Override
    public abstract String getColumnName(int column);

    @Override
    public abstract Class<?> getColumnClass(int columnIndex);


    public void adicionarElemento(T elemento) {
        if (!listaElementos.contains(elemento)) {
            listaElementos.add(elemento);
            fireTableRowsInserted(getRowCount() - 1, getRowCount() - 1);
        }
    }

    public void removerElemento(T elemento) {
        listaElementos.remove(elemento);
        fireTableRowsDeleted(getRowCount() - 1, getRowCount() - 1);
    }

    public void removerLinha(int row) {
        try {
            listaElementos.remove(row);
            fireTableRowsDeleted(getRowCount(), getRowCount());
        } catch (IndexOutOfBoundsException e) {
        }
    }

    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return true;
    }

    public void setListaElementos(List<T> listaElementos) {
        this.listaElementos = listaElementos;
        fireTableDataChanged();
    }

    public int getRowCount() {
        return listaElementos.size();
    }

}
